/**************************
* @Summary
* @Author 20009200303 赵传博
* @Date 6/2/2022
*****************************/

#ifndef HW15_1_STACK_H
#define HW15_1_STACK_H
#include <stack>
#include <iostream>

/**
 * g++编译器不支持分离编译，因此实现也要放到.h文件中！！！
 */

template<typename T>
class Stack {
private:
    std::stack<T> datas;
public:
    Stack() = default;
    void push(T data);
    void pop();
    T getTop();
    int getLength();
    bool isEmpty();
    void printAndClear();
};

template<typename T>
int Stack<T>::getLength() {
    return datas.size();
}

template<typename T>
T Stack<T>::getTop() {
    return datas.top();
}

template<typename T>
void Stack<T>::pop() {
    datas.pop();
}

template<typename T>
void Stack<T>::push(T data) {
    datas.push(data);
}

template<typename T>
bool Stack<T>::isEmpty() {
    return datas.empty();
}

template<typename T>
void Stack<T>::printAndClear() {
    while(!isEmpty()){
        std::cout << getTop();
        pop();
    }
}




#endif //HW15_1_STACK_H
